package com.ys.fordemo;

import sun.applet.Main;
import sun.text.resources.cldr.ti.FormatData_ti;

import javax.sound.midi.Soundbank;
import java.util.Scanner;
import java.util.SortedMap;

/**
 * @author CodeYang
 * @Description 利用嵌套循环打印图案,
 * continue 之后
 * @Date 2020/12/7 19:03
 */
public class For06利用嵌套循环打印图案 {

    public static void main(String[] args) {
        printfKongXing();
    }

    private static void test() {
        //打印下半部分  len -len/2 ===>4次
        int len = 4;
        for (int i = len; i >0 ; i--) {

            for (int j = 0; j < len -i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j <i*2-1 ; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }


    /**
     * * 打印空心菱形
     * *          *
     * *         * *
     * *        *   *
     * *       *     *
     * *        *   *
     * *         * *
     * *          *
     */
    private static void printfKongXing() {
        //控制打印的行数 菱形上半部分
        int len =7;
        //  打印上半部分的图形
        for (int i = 0; i <len/2 ; i++) {

            for (int j = 0; j <len/2-1-i ; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < 2*i+1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

        //打印下半部分  len -len/2 ===>4次
        int len2 =  len-len/2;
        for (int i = len2; i >0 ; i--) {
            for (int j = 0; j < len2 -i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j <i*2-1 ; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * * 打印菱形
     * *          *
     * *         ***
     * *        *****
     * *       *******
     * *        *****
     * *         ***
     * *          *
     * 分析:
     * i      空格    星星
     * 0    3       1
     * 1    2       3
     * 2    1       5
     * 3    0       7
     * 4    1       5
     * 5    2       3
     * 6    3       1
     */
    private static void printfLinXin() {

        int rows = 5; // 菱形必须是奇数的

        int n = (rows + 1) / 2;
        //打印菱形的上半部分
        for (int i = 1; i <= n; i++) {//外层循环变量i控制行数
            for (int j = 1; j <= n - i; j++) {//内层循环变量j控制该行空格数
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {//内层循环变量k控制该行*号数
                System.out.print("*");
            }
            System.out.print("\n");
        }
        //打印菱形的下半部分
        for (int i = n - 1; i >= 1; i--) {
            for (int j = 1; j <= n - i; j++) {
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.print("\n");
        }

    }

    /**
     * *   打印等腰三角形
     * *          *
     * *         ***
     * *        *****
     * *       *******
     * 关键在于 画图,转换问题分析,
     * 将人脑思维转成 计算机思维:
     * 假设，等腰三角形的行数使用len变量保存。
     * *       i        空格             星星
     * *       0     3 --> 3-i       1  --> 2*0+1
     * *       1     2 --> 3-i       3  --> 2*1+1
     * *       2     1 --> 3-i       5  --> 2*2+1
     * *       3     0 --> 3-i       7  --> 2*3+1
     * *     -------------------------------
     * *       i      len-1-i      2*i+1
     */
    private static void printfDengYao() {
        int len = 4;
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len - 1 - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < len; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

    /**
     * 核心：使用嵌套循环，外侧循环用于控制行数，内侧循环用于控制列数。
     * *   打印平行四边形
     * *      **********
     * *       **********
     * *        **********
     * *         **********
     * 核心：使用嵌套循环，外侧循环用于控制行数（i），内侧循环用于控制列数（先打印空格，然后再打印星星）。
     * *         i    空格    星星
     * *         0     0      10
     * *         1     1      10
     * *         2     2      10
     * *         3     3      10
     * *       --------------------
     * *         i     i      10
     */
    private static void printfPingXingSi() {
        for (int i = 0; i < 4; i++) {
            // 打印空格
            for (int j = 0; j < i; j++) {
                System.out.print(" ");
            }
            // 打印10个星星
            for (int j = 0; j < 10; j++) {
                System.out.print("*");
            }
            //换行
            System.out.println();
        }
    }

    /**
     * 打印矩形
     * *      *********
     * *      *********
     * *      *********
     * 嵌套循环:
     * 外层循环 执行一次
     * 内层循环 执行n次
     * 外层控制行
     * 内层控制列
     */
    private static void printfJuXing() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 9; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

}
